//package own.stu.bytebuffer.sim.agent.configDynamic;
//
//import com.alibaba.nacos.api.NacosFactory;
//import com.alibaba.nacos.api.config.ConfigService;
//import com.alibaba.nacos.api.config.listener.Listener;
//import com.alibaba.nacos.api.exception.NacosException;
//import org.yaml.snakeyaml.Yaml;
//import own.stu.bytebuffer.sim.agent.Cached;
//
//import java.util.Map;
//import java.util.Properties;
//import java.util.concurrent.*;
//
//public class NacosConfigManager {
//
//    private String serverAddr;
//    private String dataId;
//    private String group;
//    private String nameSpaceId = "develop";
//    private ConfigService configService;
//
//    public NacosConfigManager(String serverAddr, String dataId, String group) throws NacosException {
//        this.serverAddr = serverAddr;
//        this.dataId = dataId;
//        this.group = group;
//        // init();
//    }
//
//    static ExecutorService executorService = new ThreadPoolExecutor(1,2, 30L, TimeUnit.MINUTES,   new LinkedBlockingQueue<Runnable>(200));
//
//    private void init() throws NacosException {
//        Properties properties = new Properties();
//        properties.put("serverAddr", serverAddr);
//        properties.put("namespace", "69c4eecb-05bd-4041-81fe-1473f95f578c"); // develop
//        try {
//            configService = NacosFactory.createConfigService(properties);
//            configService.addListener(dataId, group, new Listener() {
//                @Override
//                public Executor getExecutor() {
//
//                    return executorService;
//                }
//
//                @Override
//                public void receiveConfigInfo(String configInfo) {
//                    // 当配置更新时，此方法会被调用
//                    // 可以在这里更新应用配置
//                    System.out.println("receiveConfigInfo -");
//                    String info = getInfo(configInfo);
//                    try {
//                        if (info != null) {
//                            Cached.setLevel(Integer.valueOf(info));
//                        }
//                    } catch (Exception e) {
//                    }
//                }
//            });
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    public String getConfig() throws NacosException {
//        return configService.getConfig(dataId, group, 3000);
//    }
//
//    /**
//     * nacos 启动多个客户端，第二个客户端则会出现连接问题
//     * @param configData
//     * @return
//     */
//    /*public static void main(String[] args) throws Exception {
//        NacosConfigManager configManager = new NacosConfigManager("127.0.0.1:8848", "frame-config.yaml", "DEFAULT_GROUP");
//        // 获取初始配置
//        String config = configManager.getConfig();
//        System.out.println("Initial config: " + config);
//        getInfo(config);
//
//        NacosConfigManager configManager2 = new NacosConfigManager("127.0.0.1:8848", "frame-config.yaml", "DEFAULT_GROUP");
//        // 获取初始配置
//        String config2 = configManager2.getConfig();
//        System.out.println("Initial config: " + config2);
//        getInfo(config2);
//        TimeUnit.MINUTES.sleep(10);
//    }*/
//
//    private static String getInfo(String configData) {
//        // 使用SnakeYAML解析YAML配置
//        Yaml yaml = new Yaml();
//        Map<String, Object> yamlConfig = yaml.load(configData);
//        Object o = yamlConfig.get("agent.level");
//        System.out.println("agent.level : " + o);
//        if (o == null) {
//            return ""; // default v
//        }
//        if (o instanceof Integer) {
//            return o + "";
//        }
//        return (String) o;
//    }
//
//   /* static volatile boolean stop = false;
//
//    Thread nacosInfo = new Thread(() -> {
//        while(!stop){
//
//        }
//    });*/
//
//
//
//    static {
//        Runnable shutdownHook = () -> {
//            executorService.shutdown();
//        };
//
//        // 注册钩子
//        addShutdownHook(shutdownHook);
//    }
//
//    static void addShutdownHook(Runnable hook) {
//        Runtime.getRuntime().addShutdownHook(new Thread(hook));
//    }
//}
